﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;

namespace InsertSubjectInfo
{
    public partial class MainForm : Telerik.WinControls.UI.RadForm
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            
        }

        private void rbtBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.Filter = "Excel 97-2003 Workbook|*.xls";
            if (op.ShowDialog() == DialogResult.OK)
            {
                rtbFileLocation.Text = op.FileName.ToString();
            }
        }

        private void rbtInsert_Click(object sender, EventArgs e)
        {
            String SourceLocation = rtbFileLocation.Text;
            SubjectInfo si = new SubjectInfo();
            Microsoft.Office.Interop.Excel.Application UngDungExcel;
            Microsoft.Office.Interop.Excel.Workbook wb;
            Microsoft.Office.Interop.Excel.Worksheet s, ns;
            UngDungExcel = new Microsoft.Office.Interop.Excel.Application();
            //UngDungExcel.Visible = true;
            wb = UngDungExcel.Workbooks.Open(SourceLocation, 0, true, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
            // sheet chứa bảng dữ liệu PHẢI là sheet đầu tiên
            s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
            ns = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[2]; // KQ được xuất ra sheet 2            
            // Đếm số dòng có trong bảng
            si.RowNo = 1;
            while (s.get_Range("A" + si.RowNo.ToString(), "A" + si.RowNo.ToString()).Value2 != null)
            {
                si.RowNo++;
            }
            si.RowNo -= 2;
            // Đếm số cột có trong bảng            
            si.ColumNo = (int)'A'; // chuyển ký tự A thành mã ASCII
            while (s.get_Range(((char)si.ColumNo).ToString() + "1", ((char)si.ColumNo).ToString() + "1").Value2 != null)
            {
                si.ColumNo++;
            }
            si.ColumNo -= 65; // 65 là mã ASCII của ký tự A
            //
            string tmp;
            si.AttList = new string[si.ColumNo];
            si.SInfo = new String[si.RowNo, si.ColumNo];
            // Đọc tên các thuộc tính (dòng tiêu đề) trong bảng
            for (int j = 0; j < si.ColumNo; j++)
            {
                tmp = ((char)(j + 65)).ToString() + "1";
                si.AttList[j] = s.get_Range(tmp, tmp).Value2.ToString();
            }
            // Đọc dữ liệu bảng trong excel vào mảng DL của biến A                                    
            for (int j = 0; j < si.ColumNo; j++)
            {
                tmp = ((char)(j + 65)).ToString() + "2";
                for (int i = 0; i < si.RowNo; i++)
                {
                    tmp = ((char)(j + 65)).ToString() + (i + 2).ToString();
                    si.SInfo[i, j] = s.get_Range(tmp, tmp).Value2.ToString();
                }
            }
            rlbResult.Visible = true;
            rlbResult.Text = "File is Loaded !!";
            String connectionString = "Data Source=.;Initial Catalog=SSS;Integrated Security=True";
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                int tk = 0, tb = 0;
                con.Open();
                for (int i = 0; i < si.RowNo; i++)
                {
                    for (int j = 1; j < si.ColumNo; j++)
                    {
                        SqlCommand updateCommand = new SqlCommand();
                        updateCommand.Connection = con;
                        updateCommand.CommandType = CommandType.Text;
                        updateCommand.CommandText = "UPDATE Subject SET " + si.AttList[j] + " = (N'" + si.SInfo[i, j].ToString() + "') WHERE " + si.AttList[0].ToString() + "= '" + si.SInfo[i, 0].ToString() + "'";
                        try
                        {
                            updateCommand.ExecuteNonQuery();
                            tk++;
                        }
                        catch (Exception abc)
                        {
                            //rlbResult.Text = abc.StackTrace.ToString();
                            tb++;
                        }
                    }
                }
                con.Close();
                rlbResult.Text = "Thanh cong " + tk.ToString() + " time(s)| That bai " + tb.ToString() + " time(s) ";
            } 
        }
    }
}
